iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
自我挑戰組

ESP32 Micropython 從入門到實用系列 第 5

05.更新開發板的 Micropython 韌體(中)

  • 分享至 

  • xImage
  •  

昨天,我們更新了 BPI-picoW-S3 開發板的 bootloader 以及 Micropython 韌體,相信您已經操作熟練了。

當我們用 Thonny 連上板子的時候,發現有個地方怪怪的:
https://ithelp.ithome.com.tw/upload/images/20230920/20140037LGlkTWtZgs.png

我們發現在板子 flash 記憶體的 “資料分割區” (data partition)裏面保存著之前 CircuitPython 的舊檔案,也就是說,在升級的過程中,這個分割區並沒有被重新格式化!這有好有壞,好處是升級不必擔心毀損資料,但壞處正是因爲如此而忽略了備份的重要性!無論如何,在升級之前,重要的資料一定要想到備份這個動作。

另外,我們也發現,單獨使用 update-tinyuf2.uf2 升級 bootloader, Micropython 或 CircuitPython 韌體會損毀,必須要重新燒錄(也就是把要燒錄的 .uf2 韌體拉到 bootloader 模式下的 USB 碟) 。

抹除整個 flash 記憶體

如果您是 CircuitPython 升級到 Micropython, 或是從 Micropython 升級到 CircuitPython, 我建議您將重要資料備份 (至於如何備份?後面的文章會說明),然後抹除整個 flash 記憶體。當然,若是板子的 flash 內容已經損毀,也需要整個 flash 抹除來做格式化的動作,然後再重新安裝 UF2 bootloader 與 Micropython 韌體。

我們今天先介紹一個相對簡單的方法來抹除 flash, 整個過程使用瀏覽器“點選”來操作,不需要下“文字”命令!

將 picoW-S3 開發板置於 USB/Serial 燒錄模式

ESP32-S3 有幾個稱爲 strapping pin 的接腳,這些腳位定義了 ESP32 開機啓動的選擇,詳細的說明可以參考 Espressif 官方文件:https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/boot-mode-selection.html

看不懂沒有關係,初學者多看多問,慢慢的自然就懂了!我們簡單說明如下:在開發板上,我們只關注在 GPIO 0 這個腳位,當它爲低電位的時候,代表板子會從 USB 或 Serial 界面來導入啓動程序,這通常用於韌體更新。其流程大約是: 板子等待從 USB/Serial 傳入啓動程式,這時我們個人電腦傳入一個小程式來讓 ESP32 開機執行。而這個小程式在 ESP32 執行後,又等待個人電腦傳入一個“燒錄韌體”,然後這個小程式執行燒錄”剛傳入的韌體“,動作完成之後,重啓電腦。

簡單來說,GPIO 0 控制著 ESP32 進入所謂的“燒錄模式”,有時後,這個腳位被標示爲 BOOT, 就是因爲前面所說的作用。

但是,我們努力的在 BPI-picoW-S3 板子上尋找,並沒看到有標示爲 GPIO 0 或是 BOOT 的地方啊!若您有 BPI-leaf-S3 板子,可以看到有一個按鈕標示爲 BOOT 的按鈕,把那個 BOOT 按鈕按下去不放開,然後按一下 RST(reset) 按鈕後放開 (當然,是在板子已經接上電源的模式下),接下來再放開 BOOT 按鈕,這樣就可以讓 BPI-leaf-S3 進入燒錄模式。

在 picoW-S3 板子 RESET 按鈕的右邊,我們發現有兩個金屬 pad (接觸點) 如下圖:上面標示爲 BOOT0

https://ithelp.ithome.com.tw/upload/images/20230920/20140037g1MH5xVOWu.png

我們把這兩個接觸用鑷子短接(只要是導電的材料短接都可以),這相當於前面所說的,按下 BOOT 不放, 然後我們按一下 Reset,接着鑷子才離開兩個 pad, 這樣的步驟就可以讓 picoW-S3 進入”燒錄模式“了,您可以多練習幾次,熟能生巧!

https://ithelp.ithome.com.tw/upload/images/20230920/20140037QDV8Uy5sLe.jpg

清除 flash 步驟

  • 用 Chrome 或 Edge 瀏覽器打開 ESP Web Flasher 網站

  • 速度選擇 “460800 Baud” ,然後按 “Connect”,彈出一個小視窗,如下圖:

https://ithelp.ithome.com.tw/upload/images/20230920/20140037d2yZDlEKZA.png

  • 在這個小視窗選擇 “USB JTAG/serial debug unit”, 按這個小視窗的 “Connect”

  • 這時候,瀏覽器的 Web Serial 已經連上開發板了,我們再按下 “Erase”,就可以抹除整個 flash

https://ithelp.ithome.com.tw/upload/images/20230920/201400371Mq978Prte.png

由 log 訊息可以看出燒錄完成。

燒錄 UF2 bootloader

承續上面的動作,按一下 "Choose a file", 如下圖:

https://ithelp.ithome.com.tw/upload/images/20230920/201400375HqwFCjeIK.png

到昨天下載的 UF2 bootloader 解開的目錄中,這次選擇 combine.bin, 然後點擊 “Progam” 來燒錄:

https://ithelp.ithome.com.tw/upload/images/20230920/20140037mXpss21ayv.png

按下 “Program" 來燒錄:

https://ithelp.ithome.com.tw/upload/images/20230920/20140037hAOWoVKWM4.png

燒錄進行中:

https://ithelp.ithome.com.tw/upload/images/20230920/20140037kpVtUzj2Lc.png

進度條跑完,燒錄完成,可以看到 log 的訊息:

Image header, Magic=0xE9, FlashMode=0x02, FlashSizeFreq=0x4F
Writing data with filesize: 4430752
Erase size 4430752, blocks 271, block size 0x4000, offset 0x0000, encrypted no
Took 41779ms to write 4430752 bytes
Erase size 0, blocks 0, block size 0x4000, offset 0x0000, encrypted no
To run the new firmware, please reset your device.

按一下 picoW-S3 板子的 Reset 按鈕,就可以開始使用新燒錄的 UF2 bootloader。也就是說,接下來,您可以利用昨天所學到的,用 UF2 bootloader 來燒錄 Micropython 韌體,我這裡就不再贅述了。

如何更新 BPI-leaf-S3 爲 UF2 Micropython 韌體

若您已經看懂 picoW-S3 的更新方式,相同的方式可以套用在 leaf-S3 板子。要注意的地方有:

  • leaf-S3 UF2 bootloader , 用這個
  • 注意 leaf-S3 進入燒錄模式的方法 (按下 BOOT 按鍵不放,再按一下 RST)
  • leaf-S3 進入 UF2 bootloader 的方法,在目前的 0.16.0 版本,並不支援雙擊 Reset 按鈕,而是按一下 Reset ,等 0.5 秒之後,再按一下 BOOT 按鈕(這等待的時間序,需要多練習幾次來體驗感覺)。 相信在下一板的 UF2 bootloader, 應該就可以像 picoW-S3 一樣用雙擊 Reset 按鈕的方式進入。
  • leaf-S3 與 picoW-S3 使用相同的 Micropython 韌體,我們昨天已經下載了。

上一篇
04.更新開發板的 Micropython 韌體(上)
下一篇
06.更新開發板的 Micropython 韌體(下)
系列文
ESP32 Micropython 從入門到實用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言